$(document).ready(function() {
	window.name = 'tsoxa';
	Tsoxa.opener = window.opener;
	Tsoxa.opener.Tsoxa = Tsoxa;
	Debug = Tsoxa.opener.Debug;

	Kafenio = Tsoxa.opener.Kafenio;
	Kafenio.tabTsoxa(true);
	Tsoxa.epanel.lefkoma = Kafenio.epanel.lefkoma;

	Tsoxa.ofelimoSetup();
	Tsoxa.kpanel.setup();
	Tsoxa.cpanel.setup();
	Tsoxa.epanel.setup();
	Tsoxa.tabKafenio();
	Client.tabPektis();
	Client.tabKlisimo($('#toolbarRight'));
	Client.bodyFloat(Tsoxa.ofelimoStretch);
	//TODO
	// Με το επόμενο φαινόταν να έχουμε πρόβλημα με την παραμονή
	// μας ως επώνυμοι χρήστες για αρκετή ώρα.
	//clearInterval(Client.cookieRecharge);

	Tsoxa.proetimasia();
	Tsoxa.refreshDOM();
	$(window).trigger('resize');
});

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Tsoxa = {
	// Η property "trapezi" είναι σημαντική και δείχνει το
	// τρέχον τραπέζι του παίκτη, το οποίο απεικονίζεται
	// στην τσόχα.

	trapezi: null,

	// Οι properties "profinfoDOM" και "profinfoOffset" είναι παρόμοιες
	// με αυτές του καφενείου και σκοπό έχουν τη διατήρηση θέσης των
	// παραθύρων πληροφορίας προφίλ κατά παίκτη.

	profinfoDOM: {},
	profinfoOffset: {},
};

Tsoxa.flags = {
	// Η flag "emoticon" δείχνει αν η στήλη των emoticons δεξιά είναι
	// ανοικτή ή όχι.

	emoticon: true,

	// Η flag "fanera23" δείχει αν τα φύλλα Ανατολής και Δύσης είναι
	// φανερά ή κλειστά.

	fanera23: false,
	viewFull: false,
	azab: false,
};

Tsoxa.proetimasia = function() {
	if (Debug.flagGet('striptiz'))
	Tsoxa.flags.fanera23 = true;
	Tsoxa.plati = Kafenio.ego.sinedriaPlatiRBGet();
	Tsoxa.italp = Tsoxa.plati === 'R' ? 'B' : 'R';
	return Tsoxa;
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Tsoxa.unload = function() {
	if (Tsoxa.refresh) {
		delete Tsoxa.refresh;
		Tsoxa.unloaded = true;
		return Tsoxa;
	}

	if (Tsoxa.unloaded) return Tsoxa;
	Tsoxa.unloaded = true;
	Kafenio.tsoxaClose();
	Tsoxa.diastasiSave();
	return Tsoxa;
};

$(window).on('beforeunload', function() {
	Tsoxa.unload();
});

$(window).on('unload', function() {
	Tsoxa.unload();
});

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Tsoxa.refreshDOM = function(refresh) {
	var trapezi = Kafenio.egoTrapezi();
	if (!trapezi) return Tsoxa.unload();

	Tsoxa.
	trapeziSet(trapezi).
	theatesRefreshDOM().
	trapeziRefreshDOM().
	panelRefresh().
	sizitisiRefreshDOM();

	if (refresh)
	Kafenio.tsoxa.Client.fyi.pano('Επαναδιαμορφώθηκε το σκηνικό της τσόχας');

	return Tsoxa;
};

// Η function "theatesRefreshDOM" ενημερώνει το DOM της περιοχής θεατών που βρίσκεται
// αριστερά από την τσόχα.

Tsoxa.theatesRefreshDOM = function() {
	// Εκκινούμε εισάγοντας ψευδοστοιχείο βάσης μετά το οποίο θα τοποθετούνται
	// οι νέοι θεατές.

	Tsoxa.theatesDOM.empty().append(Tsoxa.theatesBaseDOM = $('<div>'));

	// Διατρέχουμε όλες τις συνεδρίες με χρονολογική σειρά και εμφανίζουμε
	// αυτές που παρακολουθούν στο τραπέζι μας.

	Kafenio.skiniko.skinikoSinedriaWalk(function(sinedria) {
		if (this.sinedriaOxiTrapezi(Tsoxa.trapezi)) return;
		if (this.sinedriaOxiTheatis()) return;
		Tsoxa.theatesBaseDOM.after(this.sinedriaTsoxaTheatisCreateDOM());
	}, 1);
	return Tsoxa;
};

Tsoxa.trapeziRefreshDOM = function() {
	Tsoxa.trapeziDOM.empty().
	append(Tsoxa.dataPanoDOM = $('<div>').attr('id', 'tsoxa_dataPano').addClass('tsoxa_data')).
	append(Tsoxa.pektis3DOM = $('<div>').attr('id', 'tsoxa_pektis3').addClass('tsoxa_pektis')).
	append(Tsoxa.fila3DOM = $('<div>').attr('id', 'tsoxa_fila3').addClass('tsoxa_fila')).
	append(Tsoxa.pektis2DOM = $('<div>').attr('id', 'tsoxa_pektis2').addClass('tsoxa_pektis')).
	append(Tsoxa.fila2DOM = $('<div>').attr('id', 'tsoxa_fila2').addClass('tsoxa_fila')).
	append(Tsoxa.pektis1DOM = $('<div>').attr('id', 'tsoxa_pektis1').addClass('tsoxa_pektis')).
	append(Tsoxa.fila1DOM = $('<div>').attr('id', 'tsoxa_fila1').addClass('tsoxa_fila')).
	append(Tsoxa.dataKatoDOM = $('<div>').attr('id', 'tsoxa_dataKato').addClass('tsoxa_data')).
	append(Tsoxa.tzogosDOM = $('<div>').attr({
		id: 'tsoxa_tzogos',
		title: 'Τζόγος',
	})).
	append(Tsoxa.azabDOM = $('<div>').attr({
		id: 'tsoxa_azab',
		title: 'Τελευταία μπάζα',
	})).
	append(Tsoxa.filaPrevDOM = $('<div>').attr({
		id: 'tsoxa_filaPrev',
		title: 'Προηγούμενη χαρτωσιά',
	})).
	append(Tsoxa.enimerosiDOM = $('<div>').attr('id', 'tsoxa_enimerosi')).
	append(Tsoxa.dilosiPanelDOM = $('<div>').attr('id', 'tsoxa_dilosiPanel')).
	append(Tsoxa.agoraPanelDOM = $('<div>').attr('id', 'tsoxa_agoraPanel')).
	append(Tsoxa.dialogosDOM = $('<div>').attr('id', 'tsoxa_dialogos').addClass('dialogos'));

	Tsoxa.
	pektisTheatis().
	dixeKripseFila(3).
	dixeKripseFila(2).
	dataPanoRefreshDOM().
	dataKatoRefreshDOM().
	thesiWalk(function(thesi) {
		Tsoxa.
		pektisRefreshDOM(thesi).
		filaRefreshDOM(thesi);
	}).
	tzogosRefreshDOM().
	bazaRefreshDOM().
	azabRefreshDOM().
	claimRefreshDOM().
	enimerosi().
	efoplismos();

	return Tsoxa;
};

// Η function "thesiWalk" διατρέχει της θέσεις του τραπεζιού της τσόχας και
// για κάθε θέση καλεί callback function με παράμετρο τη θέση.

Tsoxa.thesiWalk = function(callback) {
	Tsoxa.trapezi.trapeziThesiWalk(function(thesi) {
		callback(thesi);
	});

	return Tsoxa;
};

Tsoxa.trapeziSet = function(trapezi) {
	Tsoxa.trapezi = trapezi;
	return Tsoxa;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Tsoxa.enimerosi = function() {
	var proc = 'enimerosi' + Tsoxa.trapezi.partidaFasiGet();
	Tsoxa.enimerosiDOM.css('display', 'none').css('width', '').empty();
	if (typeof Tsoxa[proc] === 'function') Tsoxa[proc]();
	return Tsoxa;
};

Tsoxa.enimerosiΔΙΑΝΟΜΗ = function() {
	var thesi, kimeno;

	thesi = Kafenio.egoThesiMap(Tsoxa.trapezi.partidaDealerGet());
	if (thesi == 1) {
		kimeno = Kafenio.egoIsPektis() ?
			'Μοιράζετε φύλλα.'
		:
			'Ο παίκτης που παρακολουθείτε μοιράζει φύλλα.';
	}
	else {
		kimeno = 'Ο παίκτης ';
		switch (thesi) {
		case 2:
			kimeno += 'δεξιά';
			break;
		default:
			kimeno += 'αριστερά';
			break;
		}

		kimeno += ' ';
		kimeno += Kafenio.egoIsPektis() ?  'σας' : 'από τον παίκτη που παρακολουθείτε';
		kimeno += ' μοιράζει φύλλα.';
	}

	kimeno += ' Παρακαλώ περιμένετε…';
	Tsoxa.enimerosiDOM.css('width', '190px').
	append($('<img>').attr('src', '../ikona/working/bares.gif').
	addClass('tsoxa_enimerosiIcon').css('width', '70px')).
	append($('<div>').text(kimeno)).css('display', 'block');

	return Tsoxa;
};

Tsoxa.enimerosiΔΗΛΩΣΗ = function() {
	var thesi, kimeno, ikona = 'working/venetia.gif', ikonaWidth = '70px';

	thesi = Kafenio.egoThesiMap(Tsoxa.trapezi.partidaEpomenosGet());
	switch (thesi) {
	case 1:
		if (Kafenio.egoIsPektis()) {
			ikona = 'endixi/nevrikos.gif';
			ikonaWidth = '46px';
			kimeno = 'Πλειοδοτήστε προκειμένου να κερδίσετε την αγορά, αλλιώς πείτε πάσο. ' +
				'Οι συμπαίκτες σας περιμένουν…'
		}
		else {
			kimeno = 'Ο παίκτης που παρακολουθείτε σκέφτεται αν θα πλειοδοτήσει ' +
				'στην αγορά. Παρακαλώ περιμένετε…';
		}
		break;
	default:
		kimeno = 'Ο παίκτης ' + (thesi == 2 ? 'δεξιά' : 'αριστερά') + ' ' +
			(Kafenio.egoIsPektis() ?  'σας' : 'από τον παίκτη που παρακολουθείτε') +
			' σκέφτεται αν θα πλειοδοτήσει στην αγορά. Παρακαλώ περιμένετε…';
		break;
	}

	Tsoxa.enimerosiDOM.css('width', '190px').
	append($('<img>').attr('src', '../ikona/' + ikona).addClass('tsoxa_enimerosiIcon').css('width', ikonaWidth)).
	append($('<div>').text(kimeno)).css('display', 'block');

	return Tsoxa;
};

Tsoxa.enimerosiΑΛΛΑΓΗ = function() {
	var thesi, kimeno, img = 'working/koutakia.gif', width = '', iconWidth = '';

	thesi = Kafenio.egoThesiMap(Tsoxa.trapezi.partidaEpomenosGet());
	if (thesi == 1) {
		if (Kafenio.egoIsPektis()) {
			Tsoxa.enimerosiDOM.css('top', '194px');
			kimeno = 'Αλλάξτε φύλλα και δηλώστε την αγορά σας. Οι συμπαίκτες σας περιμένουν…';
			img = 'endixi/nevrikos.gif';
			iconWidth = '46px';
			width = '190px';
		}
		else {
			kimeno = 'Ο παίκτης που παρακολουθείτε αλλάζει φύλλα. Παρακαλώ περιμένετε την αγορά του…';
		}
	}
	else {
		kimeno = 'Ο παίκτης ';
		switch (thesi) {
		case 2:
			kimeno += 'δεξιά';
			break;
		default:
			kimeno += 'αριστερά';
			break;
		}

		kimeno += ' ';
		kimeno += Kafenio.egoIsPektis() ?  'σας' : 'από τον παίκτη που παρακολουθείτε';
		kimeno += ' αλλάζει φύλλα. Παρακαλώ περιμένετε την αγορά του…';
	}

	Tsoxa.enimerosiDOM.css('width', width).
	append($('<img>').attr('src', '../ikona/' + img).addClass('tsoxa_enimerosiIcon').css('width', iconWidth)).
	append($('<div>').text(kimeno)).css('display', 'block');

	return Tsoxa;
};

Tsoxa.enimerosiΣΥΜΜΕΤΟΧΗ = function() {
	var thesi, kimeno, ikona = 'working/atom.gif', ikonaWidth = '30px';

	thesi = Kafenio.egoThesiMap(Tsoxa.trapezi.partidaEpomenosGet());
	switch (thesi) {
	case 1:
		if (Kafenio.egoIsPektis()) {
			Tsoxa.enimerosiDOM.css('width', 300);
			ikona = 'endixi/nevrikos.gif';
			ikonaWidth = '46px';
			kimeno = 'Αποφασίστε αν θα διεκδικήσετε τις μπάζες που σας αναλογούν. ' +
				'Οι συμπαίκτες σας περιμένουν…'
		}
		else {
			kimeno = 'Ο παίκτης που παρακολουθείτε σκέφτεται αν θα διεκδικήσει ' +
				'τις μπάζες που του αναλογούν. Παρακαλώ περιμένετε…';
		}
		break;
	default:
		kimeno = 'Ο παίκτης ' + (thesi == 2 ? 'δεξιά' : 'αριστερά') + ' ' +
			(Kafenio.egoIsPektis() ?  'σας' : 'από τον παίκτη που παρακολουθείτε') +
			' σκέφτεται αν θα διεκδικήσει τις μπάζες που του αναλογούν. Παρακαλώ περιμένετε…';
		break;
	}

	Tsoxa.enimerosiDOM.
	append($('<img>').attr('src', '../ikona/' + ikona).addClass('tsoxa_enimerosiIcon').css('width', ikonaWidth)).
	append($('<div>').text(kimeno)).css('display', 'block');

	return Tsoxa;
};

Tsoxa.enimerosiΠΛΗΡΩΜΗ = function() {
	Tsoxa.enimerosiDOM.
	append($('<img>').attr('src', '../ikona/endixi/pliromi.gif').addClass('tsoxa_enimerosiIcon')).
	append($('<div>').text('Γίνεται πληρωμή. Παρακαλώ περιμένετε…')).css({
		display: 'block',
		width: '190px',
	});
	return Tsoxa;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Η function "efoplismos" αρματώνει την τσόχα με event listeners και χειρισμούς
// που μπορούν να κάνουν οι παίκτες σε κάθε ιδιαίτερη τη φάση του παιχνιδιού.
// Εκτός, όμως, από το αρμάτωμα κάνουμε και άλλες εξειδικευμένες εργασίες που
// αφορούν στην εμφάνιση ή μη κάποιων στοιχείων της τσόχας κλπ.

Tsoxa.efoplismos = function() {
	var thesi, efoplismos;

	if (Kafenio.egoOxiPektis()) return Tsoxa;

	// Εκκινούμε τη διαδικασία κάνοντας ακυρώνοντας τυχόν υπάρχοντα
	// οπλισμό της τσόχας.

	Tsoxa.afoplismos();

	// Το «αρμάτωμα» της τσόχας με χειρισμούς και event listeners δεν
	// το επιχειρούμε με το χέρι, αλλά με ιδιαίτερες functions που
	// αφορούν στην τρέχουσα φάση του παιχνδιού.

	efoplismos = 'efoplismos' + Tsoxa.trapezi.partidaFasiGet();
	if (typeof Tsoxa.trapezi[efoplismos] === 'function') Tsoxa.trapezi[efoplismos]();

	return Tsoxa;
};

// Η function "afoplismos" ακυρώνει event listeners της τσόχας η οποία με
// αυτόν τον τρόπο καθίσταται ακίνδυνη και ανενεργή.

Tsoxa.afoplismos = function() {
	Tsoxa.dilosiPanelDOM.css('display', 'none');
	Tsoxa.agoraPanelDOM.css('display', 'none');
	Tsoxa.xipnitiriAfoplismos();

	return Tsoxa;
};

Tsoxa.pektisTheatis = function() {
	if (Kafenio.egoIsPektis()) {
		if (!Debug.flagGet('striptiz')) delete Tsoxa.flags.fanera23;
		Tsoxa.trapeziDOM.removeClass('tsoxa_trapeziTheasi').addClass('tsoxa_trapeziPeximo');
	}
	else {
		Tsoxa.trapeziDOM.removeClass('tsoxa_trapeziPeximo').addClass('tsoxa_trapeziTheasi');
	}

	return Tsoxa;
};

Tsoxa.dixeKripseFila = function(iseht) {
	var filaDOM = Tsoxa['fila' + iseht + 'DOM'], pektisDOM = Tsoxa['pektis' + iseht + 'DOM'];

	if (Tsoxa.flags.fanera23) filaDOM.css('display', 'block');

	filaDOM.on('mouseenter', function(e) {
		e.stopPropagation();
		if (Debug.flagGet('striptiz')) return;
		filaDOM.css('visibility', 'hidden');
	});
	pektisDOM.on('mouseleave', function(e) {
		e.stopPropagation();
		filaDOM.css('visibility', 'visible');
	});

	return Tsoxa;
};

Tsoxa.dataPanoRefreshDOM = function() {
	var dianomiDOM, ipolipoDOM, optionsDOM;


	Tsoxa.dataPanoDOM.empty().
	append($('<div>').attr('id', 'tsoxa_kodikos').addClass('trapeziDataKodikos').
	attr('title', 'Κωδικός τραπεζιού').text(Tsoxa.trapezi.trapeziKodikosGet())).
	append(dianomiDOM = $('<div>').attr('id', 'tsoxa_dianomi')).
	append(kasaDOM = $('<div>').attr('id', 'tsoxa_kasa')).
	append(ipolipoDOM = $('<div>').attr('id', 'tsoxa_ipolipo')).
	append(optionsDOM = $('<div>').attr('id', 'tsoxa_options'));

	if (Tsoxa.trapezi.trapeziOxiAsoi())
	optionsDOM.append($('<img>').addClass('tsoxa_option').attr({
		src: '../ikona/panel/pexnidi/asoiOn.png',
		title: 'Δεν παίζονται οι άσοι',
	}));

	if (Tsoxa.trapezi.trapeziIsPaso())
	optionsDOM.append($('<img>').addClass('tsoxa_option').attr({
		src: '../ikona/panel/pexnidi/pasoOn.png',
		title: 'Παίζεται το πάσο',
	}));

	Tsoxa.
	dianomiRefreshDOM(dianomiDOM).
	kasaRefreshDOM(kasaDOM).
	ipolipoRefreshDOM(ipolipoDOM);
	return Tsoxa;
};

Tsoxa.dianomiRefreshDOM = function(dom) {
	var dianomi;

	if (dom === undefined) dom = $('#tsoxa_dianomi');

	dianomi = Tsoxa.trapezi.trapeziTelefteaDianomi();
	if (!dianomi) {
		dom.css('display', 'none');
		return Tsoxa;
	}

	dom.css('display', 'inline-block');
	dom.addClass('sinefo').attr('title', 'Κωδικός τρέχουσας διανομής').text(dianomi.dianomiKodikosGet());
	return Tsoxa;
};

Tsoxa.kasaRefreshDOM = function(dom) {
	var trapezi, kasa;

	trapezi = Tsoxa.trapezi;
	if (!trapezi) return Tsoxa;

	if (dom === undefined) dom = $('#tsoxa_kasa');

	kasa = trapezi.trapeziKasaGet();
	if (!kasa) kasa = 0;
	else kasa *= 3;
	dom.addClass('sinefo').attr('title', 'Αρχική κάσα').text(kasa);
	return Tsoxa;
};

Tsoxa.ipolipoRefreshDOM = function(dom) {
	var trapezi, ipolipo;

	trapezi = Tsoxa.trapezi;
	if (!trapezi) return Tsoxa;

	if (dom === undefined) dom = $('#tsoxa_ipolipo');

	ipolipo = trapezi.trapeziIpolipoGet();
	dom.addClass('sinefo').attr('title', 'Τρέχον υπόλοιπο κάσας').text(ipolipo / 10);
	if (ipolipo <= 0) {
		dom.addClass('tsoxa_ipolipoMion');
		Tsoxa.trapeziDOM.append($('<img>').addClass('tsoxa_telosIcon').
		attr('src', '../ikona/endixi/telos.png'));
	}
	else {
		Tsoxa.trapeziDOM.find('.tsoxa_telosIcon').remove();
		if (ipolipo < 300) dom.addClass('tsoxa_ipolipoLigo');
		else dom.removeClass('tsoxa_ipolipoLigo');
	}

	return Tsoxa;
};

Tsoxa.dataKatoRefreshDOM = function() {
	var trapezi = Tsoxa.trapezi, akirosi;

	Tsoxa.dataKatoDOM.empty().
	append($('<div>').addClass('tsoxa_partidaInfo').
	append($('<div>').addClass('tsoxa_partidaInfoFasi').attr({
		title: 'Φάση παρτίδας',
	}).text(trapezi.partidaFasiGet())));

	akirosi = trapezi.trapeziAkirosiGet();
	if (!akirosi) return Tsoxa;

	Tsoxa.dataKatoDOM.append($('<div>').addClass('tsoxa_partidaInfoAkirosi').
		html('Ο παίκτης <div class="tsoxa_partidaInfoAkirosiLogin">' +
			akirosi + '</div> ακυρώνει κινήσεις&hellip;'));
	return Tsoxa;
};

Tsoxa.pektisRefreshDOM = function(thesi) {
	var dom, domMain, domOnoma, domKapikia, domAgora, domDilosi, domBazes,
		iseht = Kafenio.egoThesiMap(thesi), trapezi = Tsoxa.trapezi;

	dom = Tsoxa['pektis' + iseht + 'DOM'].empty().
	append(domMain = $('<div>').attr('id', 'tsoxa_pektisMain' + iseht).addClass('tsoxa_pektisMain').
	append(domOnoma = $('<div>').addClass('tsoxa_pektisOnoma')).
	append(domKapikia = $('<div>').addClass('tsoxa_pektisKapikia')).
	append(domAgora = $('<div>').addClass('tsoxa_pektisAgora'))).
	append(domDilosi = $('<div>').attr('id', 'tsoxa_pektisDilosi' + iseht).addClass('tsoxa_pektisDilosi')).
	append(domBazes = $('<div>').attr('id', 'tsoxa_pektisBazes' + iseht).addClass('tsoxa_pektisBazes'));

	Tsoxa['pektisMain' + iseht + 'DOM'] = domMain;
	Tsoxa['pektisOnoma' + iseht + 'DOM'] = domOnoma;
	Tsoxa['pektisKapikia' + iseht + 'DOM'] = domKapikia;
	Tsoxa['pektisAgora' + iseht + 'DOM'] = domAgora;
	Tsoxa['pektisDilosi' + iseht + 'DOM'] = domDilosi;
	Tsoxa['pektisBazes' + iseht + 'DOM'] = domBazes;

	Tsoxa.
	pektisDataRefreshDOM(thesi, iseht, domMain, domOnoma).
	pektisKapikiaRefreshDOM(thesi, iseht, domKapikia).
	pektisAgoraRefreshDOM(thesi, iseht, domAgora).
	pektisDilosiRefreshDOM(thesi, iseht, domDilosi).
	pektisBazesRefreshDOM(thesi, iseht, domBazes).
	pektisAnamoniRefreshDOM(thesi, iseht, domMain);

	if (Tsoxa.isDealer(thesi)) domMain.append($('<img>').
	addClass('tsoxa_pektisIcon').attr({
		src: Client.server + 'ikona/endixi/dealer.png',
		title: 'Μοιράζει φύλλα',
	}));

	if (Tsoxa.isProtos(thesi)) domMain.append($('<img>').
	addClass('tsoxa_pektisIcon').attr({
		src: Client.server + 'ikona/endixi/protos.png',
		title: 'Πρώτος παίκτης μετά τον παίκτη που μοίρασε',
	}));

	if (trapezi.partidaIsClaim(thesi)) domMain.append($('<img>').
	addClass('tsoxa_pektisIcon tsoxa_pektisIconClaim').attr({
		src: Client.server + 'ikona/panel/pexnidi/claim.png',
		title: 'Παραιτήθηκε από τις υπόλοιπες μπάζες',
	}));

	if (Tsoxa.isEpomenos(thesi)) domMain.addClass('tsoxa_epomenos');

	switch (trapezi.partidaFasiGet()) {
	case 'ΠΑΙΧΝΙΔΙ':
	case 'ΠΛΗΡΩΜΗ':
		if (trapezi.sdilosi[thesi]) {
			if (trapezi.sdilosi[thesi].simetoxiIsPaso())
			domMain.addClass('tsoxa_pektisEktos');

			else if (trapezi.sdilosi[thesi].simetoxiIsMazi())
			domMain.append($('<img>').
			addClass('tsoxa_pektisIcon tsoxa_pektisIconMazi').attr({
				src: Client.server + 'ikona/endixi/mazi.png',
				title: 'Πήρε τον συμπαίκτη να παίξουν μαζί',
			}));
		}
		break;
	}

	if (trapezi.simetoxi[thesi] === 'ΠΑΣΟ') var x = 1;
	if (Kafenio.egoIsPektis()) return Tsoxa;

	// Αλλαγή θέσης θέασης

	dom.on('click', function(e) {
		e.stopPropagation();
		if (Kafenio.egoThesiGet() === thesi) return;

		Client.fyi.pano('Αλλαγή θέσης θέασης. Παρακαλώ περιμένετε…');
		Client.skiserService('thesiTheasis', 'thesi=' + thesi).
		done(function(rsp) {
			Client.fyi.pano();
		}).
		fail(function(err) {
			Client.skiserFail(err);
		});
	});

	return Tsoxa;
};

// Η function "pektisDataRefreshDOM" δέχεται ως παράμετρο τη θέση κάποιου παίκτη
// στο τραπέζι και ενημερώνει τα DOM elements που αφορούν στα στοιχεία και στην
// κατάσταση του παίκτη. Αν δεν καθορίσουμε θέση, τότε η function καλείται και
// για τους τρεις παίκτες του τραπεζιού.

Tsoxa.pektisDataRefreshDOM = function(thesi, iseht, domMain, domOnoma) {
	var login, sinedria;

	if (thesi === undefined) return Tsoxa.thesiWalk(function(thesi) {
		Tsoxa.pektisDataRefreshDOM(thesi);
	});

	if (iseht === undefined) iseht = Kafenio.egoThesiMap(thesi);
	if (domMain === undefined) domMain = Tsoxa['pektisMain' + iseht + 'DOM'];
	if (domOnoma === undefined) domOnoma = Tsoxa['pektisOnoma' + iseht + 'DOM'];

	domMain.removeClass('xapodoxi rebelos theatis alitis offline fevgatos');
	domOnoma.removeClass('fantasma tsoxa_sxesiFilos tsoxa_sxesiApoklismenos');

	if (Tsoxa.trapezi.trapeziOxiApodoxi(thesi)) domMain.addClass('xapodoxi');

	login = Tsoxa.trapezi.trapeziPektisGet(thesi);
	if (!login) {
		domMain.addClass('fevgatos');
		login = Tsoxa.trapezi.trapeziIxotemisGet(thesi);
		if (login) domOnoma.addClass('fantasma').html(login);
		return Tsoxa;
	}

	sinedria = Kafenio.skiniko.skinikoSinedriaGet(login);
	if (sinedria) {
		if (sinedria.sinedriaIsRebelos()) domMain.addClass('rebelos');
		else if (sinedria.sinedriaIsTheatis()) domMain.addClass('theatis');
		if (Tsoxa.trapezi.trapeziOxiTrapezi(sinedria.sinedriaTrapeziGet())) domMain.addClass('alitis');
	}
	else domMain.addClass('offline');

	domOnoma.html(login);
	if (Kafenio.isFilos(login)) domOnoma.addClass('tsoxa_sxesiFilos');
	else if (Kafenio.isApoklismenos(login)) domOnoma.addClass('tsoxa_sxesiApoklismenos');

	return Tsoxa;
};

Tsoxa.pektisKapikiaRefreshDOM = function(thesi, iseht, dom) {
	var kapikia, klasi;

	if (thesi === undefined) {
		Prefadoros.thesiWalk(function(thesi) {
			Tsoxa.pektisKapikiaRefreshDOM(thesi);
		});
		return Tsoxa;
	}

	if (iseht === undefined) iseht = Kafenio.egoThesiMap(thesi);
	if (dom === undefined) dom = Tsoxa['pektisKapikia' + iseht + 'DOM'];

	kapikia = Tsoxa.trapezi.partidaKapikiaGet(thesi);
	if (!kapikia) {
		dom.empty();
		return Tsoxa;
	}

	klasi = 'tsoxa_pektisKapikiaPoso';
	if (kapikia < 0) klasi += ' tsoxa_pektisKapikiaPosoMion';
	dom.
	append('καπίκια').
	append($('<div>').addClass(klasi).text(Tsoxa.trapezi.partidaKapikiaGet(thesi)));
	return Tsoxa;
};

Tsoxa.pektisAgoraRefreshDOM = function(thesi, iseht, dom) {
	var trapezi, dlist, agora, tzogadoros, dilosi;

	trapezi = Tsoxa.trapezi;
	dlist = Tsoxa.trapezi.adilosi;

	if (iseht === undefined) iseht = Kafenio.egoThesiMap(thesi);
	if (dom === undefined) dom = Tsoxa['pektisAgora' + iseht + 'DOM'];
	dom.empty().removeClass('tsoxa_pektisAgoraTzogadoros tsoxa_pektisAgoraTzogadorosCandi');

	// Αν δεν έχει γίνει δήλωση κατά τη φάση της αγοράς από τον συγκεκριμένο παίκτη
	// δεν πρέπει να εμφανίσουμε κάτι στην περιοχή της δήλωσης αγοράς.

	if (!dlist.hasOwnProperty(thesi)) return Tsoxa;

	// Θα ελέγξουμε τώρα αν έχει γίνει αγορά στο τραπέζι και αν ο συγκεκριμένος παίκτης
	// είναι ο τζογαδόρος. Σ' αυτή την περίπτωησ θα εμφανίσουμε την αγορά του.

	tzogadoros = trapezi.partidaTzogadorosGet();
	agora = trapezi.partidaAgoraGet();
	if (agora && (thesi === tzogadoros)) dilosi = agora;

	// Αλλιώς θα εμφανίσουμε την τελευταία δήλωση που είχε κάνει κατά τη φάση της
	// αγοράς.

	else dilosi = dlist[thesi];

	dom.append(dilosi.dilosiDOM().addClass('tsoxa_pektisAgoraDilosi'));
	switch (trapezi.partidaFasiGet()) {
	case 'ΔΗΛΩΣΗ':
		if (thesi != tzogadoros) return Tsoxa;
		dom.addClass('tsoxa_pektisAgoraTzogadorosCandi');
		break;
	case 'ΑΛΛΑΓΗ':
		if (thesi != tzogadoros) return Tsoxa;
		dom.addClass('tsoxa_pektisAgoraTzogadoros').
		append($('<img>').addClass('tsoxa_pektisIcon').attr({
			id: 'tsoxa_pektisAgoraTzogos',
			src: '../ikona/endixi/tzogos.png',
			title: 'Αλλαγή φύλλων',
		}));
		break;
	default:
		if (thesi == tzogadoros) dom.addClass('tsoxa_pektisAgoraTzogadoros');
		else if (trapezi.partidaBazaCountGet() > 0) dom.addClass('tsoxa_pektisAgoraAminomenos');
		break;
	}

	return Tsoxa;
};

Tsoxa.pektisDilosiRefreshDOM = function(thesi, iseht, dom) {
	var trapezi = Tsoxa.trapezi, paso, dilosi;

	if (iseht === undefined) iseht = Kafenio.egoThesiMap(thesi);
	if (dom === undefined) dom = Tsoxa['pektisDilosi' + iseht + 'DOM'];
	dom.empty().removeClass('tsoxa_pektisDilosiPaso tsoxa_pektisDilosiAgora ' +
		'tsoxa_pektisSimetoxiPaso tsoxa_pektisSimetoxiPezo ' +
		'tsoxa_pektisSimetoxiMazi tsoxa_pektisSimetoxiMonos');

	switch (trapezi.partidaFasiGet()) {
	case 'ΔΗΛΩΣΗ':
		paso = Tsoxa.trapezi.apaso;
		if (paso.hasOwnProperty(thesi)) {
			dom.addClass('tsoxa_pektisDilosiPaso').text('ΠΑΣΟ');
			return Tsoxa;
		}

		if ((trapezi.tagrafo == thesi) && (trapezi.partidaTzogadorosGet() != thesi)) {
			dom.addClass('tsoxa_pektisDilosiPaso').html('&mdash;');
			return Tsoxa;
		}

		if (thesi !== trapezi.partidaEpomenosGet()) return Tsoxa;
		if (!trapezi.anext) return Tsoxa;
		if (Kafenio.egoIsPektis() && (Kafenio.egoThesiGet() == thesi)) return Tsoxa;

		dilosi = trapezi.anext;
		if (dilosi.dilosiIsTagrafo() && (trapezi.apasoCount == 2)) dilosi = new Tsoxa.opener.Dilosi('DS6');
		dom.append(dilosi.dilosiDOM()).addClass('tsoxa_pektisDilosiAgora').
		attr({title: 'Σκέφτεται "' + dilosi.dilosiLektiko() + '"'});
		break;
	case 'ΣΥΜΜΕΤΟΧΗ':
	case 'ΠΑΙΧΝΙΔΙ':
		if (trapezi.partidaBazaCountGet() > 0) {
			dom.css('display', 'none');
			return Tsoxa;
		}

		if (thesi === trapezi.partidaTzogadorosGet()) return Tsoxa;

		dilosi = trapezi.sdilosi;
		if (!dilosi[thesi]) return Tsoxa;

		if (dilosi[thesi].simetoxiIsPaso()) dom.addClass('tsoxa_pektisSimetoxiPaso').text('ΠΑΣΟ');
		else if (dilosi[thesi].simetoxiIsPezo()) dom.addClass('tsoxa_pektisSimetoxiPezo').text('ΠΑΙΖΩ');
		else if (dilosi[thesi].simetoxiIsMazi()) dom.addClass('tsoxa_pektisSimetoxiMazi').text('ΜΑΖΙ');
		else if (dilosi[thesi].simetoxiIsVoithao()) dom.addClass('tsoxa_pektisSimetoxiPezo').text('ΒΟΗΘΑΩ');
		else if (dilosi[thesi].simetoxiIsMonos()) dom.addClass('tsoxa_pektisSimetoxiMonos').text('ΜΟΝΟΣ');
		break;
	}

	return Tsoxa;
};

Tsoxa.pektisBazesRefreshDOM = function(thesi, iseht, dom) {
	var trapezi = Tsoxa.trapezi, bazes, plati;

	if (iseht === undefined) iseht = Kafenio.egoThesiMap(thesi);
	if (dom === undefined) dom = Tsoxa['pektisBazes' + iseht + 'DOM'];

	dom.empty();
	switch (trapezi.partidaFasiGet()) {
	case 'ΠΑΙΧΝΙΔΙ':
	case 'CLAIM':
	case 'ΠΛΗΡΩΜΗ':
		bazes = trapezi.partidaBazesGet(thesi);
		if (isNaN(bazes)) return Tsoxa;
		if (bazes < 1) return Tsoxa;

		dom.css('display', 'block');
		do {
			plati = (Math.floor((bazes - 1) / 3) % 2) ? Tsoxa.plati : Tsoxa.italp;
			dom.prepend($('<img>').addClass('tsoxa_pektisBazesBaza').
			attr('src', '../ikona/trapoula/' + plati + 'L.png'));
		} while (--bazes > 0);
		break;
	}

	return Tsoxa;
};

Tsoxa.pektisAnamoniRefreshDOM = function(thesi, iseht, domMain) {
	var trapezi = Tsoxa.trapezi;

	if (iseht === undefined) iseht = Kafenio.egoThesiMap(thesi);
	if (domMain === undefined) domMain = Tsoxa['pektisMain' + iseht + 'DOM'];

	domMain.find('.tsoxa_endixiAnamoni').remove();
	switch (trapezi.partidaFasiGet()) {
	case 'ΔΙΑΝΟΜΗ':
		if (thesi != trapezi.partidaDealerGet()) return Tsoxa;
		domMain.append(endixi = $('<img>').addClass('tsoxa_endixiAnamoni').attr({
			src: '../ikona/working/default.gif',
			title: 'Ο παίκτης μοιράζει φύλλα',
		}));
		break;
	case 'ΔΗΛΩΣΗ':
		if (thesi != trapezi.partidaEpomenosGet()) return Tsoxa;
		domMain.append(endixi = $('<img>').addClass('tsoxa_endixiAnamoni').attr({
			src: Tsoxa.pektisAnamoniIkona(thesi),
			title: 'Σκέφτεται την επόμενη δήλωση αγοράς',
		}));
		break;
	case 'ΑΛΛΑΓΗ':
		if (thesi != trapezi.partidaEpomenosGet()) return Tsoxa;
		domMain.append(endixi = $('<img>').addClass('tsoxa_endixiAnamoni').attr({
			src: Tsoxa.pektisAnamoniIkona(thesi),
			title: 'Σκέφτεται αλλαγή και δήλωση αγοράς',
		}));
		break;
	case 'ΣΥΜΜΕΤΟΧΗ':
		if (thesi != trapezi.partidaEpomenosGet()) return Tsoxa;
		domMain.append(endixi = $('<img>').addClass('tsoxa_endixiAnamoni').attr({
			src: Tsoxa.pektisAnamoniIkona(thesi, 'endixi/erotimatiko.gif'),
			title: 'Σκέφτεται αν θα διεκδικήσει τις μπάζες του',
		}));
		break;
	case 'ΠΑΙΧΝΙΔΙ':
		if (thesi != trapezi.partidaEpomenosGet()) return Tsoxa;
		domMain.append(endixi = $('<img>').addClass('tsoxa_endixiAnamoni').attr({
			src: Tsoxa.pektisAnamoniIkona(thesi, 'endixi/balitsa.gif'),
			title: 'Σκέφτεται ποιο φύλλο θα παίξει',
		}));
		break;
	}

	return Tsoxa;
};

Tsoxa.pektisAnamoniIkona = function(thesi, img) {
	if (img === undefined) img = 'working/rologaki.gif';
	return '../ikona/' + ((Kafenio.egoIsPektis() && (thesi == Kafenio.egoThesiGet())) ? 'endixi/rollStar.gif' : img);
};

Tsoxa.filaRefreshDOM = function(thesi) {
	var dom, fila, iseht = Kafenio.egoThesiMap(thesi);

	dom = Tsoxa['fila' + iseht + 'DOM'].empty();
	fila = Tsoxa.trapezi.partidaFilaGet(thesi);
	if (!fila) return Tsoxa;

	dom.append(fila.xartosiaTaxinomisi().xartosiaDOM(iseht));
	return Tsoxa;
};

Tsoxa.tzogosRefreshDOM = function() {
	var dom, fila;

	dom = Tsoxa.tzogosDOM.css('display', 'none').empty();
	fila = Tsoxa.trapezi.partidaTzogosGet();
	if (!fila) return Tsoxa;

	fila = fila.xartosiaFilaGet();
	dom.
	append(fila[0].filoDOM().addClass('tsoxa_tzogosFilo tsoxa_tzogosFiloLeft')).
	append(fila[1].filoDOM().addClass('tsoxa_tzogosFilo tsoxa_tzogosFiloRight'));

	switch (Tsoxa.trapezi.partidaFasiGet()) {
	case 'ΔΙΑΝΟΜΗ':
	case 'ΔΗΛΩΣΗ':
		dom.css('display', 'block');
		break;
	}

	return Tsoxa;
};

Tsoxa.bazaRefreshDOM = function(prev) {
	var trapezi = Tsoxa.trapezi, pios, fila, nikitis, i, iseht, epomenos;

	if (prev === undefined) {
		pios = trapezi.bazaPios;
		fila = trapezi.bazaFila;
	}
	else {
		pios = trapezi.azabPios;
		fila = trapezi.azabFila;
	}

	epomenos = trapezi.partidaEpomenosGet();
	nikitis = trapezi.partidaBazaPios(prev);
	$('.tsoxa_bazaFilo').finish().remove();
	$('.tsoxa_velosFilo').remove();
	for (i = 0; i < pios.length; i++) {
		iseht = Kafenio.egoThesiMap(pios[i]);
		Tsoxa.trapeziDOM.
		append($('<img>').addClass('tsoxa_bazaFilo').attr({
			id: 'tsoxa_bazaFilo' + iseht,
			src: '../ikona/trapoula/' + fila[i].filoXromaGet() + fila[i].filoAxiaGet() + '.png',
		})).
		append($('<img>').addClass('tsoxa_velosFilo').attr({
			id: 'tsoxa_velosFilo' + iseht,
			src: '../ikona/velos/baza/' + (epomenos === pios[i] ? 'pare' : 'dose') + iseht + '.png',
		}).css('opacity', pios[i] == nikitis ? 1.0 : 0.5));
	}

	return Tsoxa;
};

// Στα arrays που ακολουθούν κρατάμε τα στοιχεία της τελευταίας που
// παίχτηκε στην τσόχα μας. Συνήθως η τελευταία μπάζα εμφανίζεται με
// βάση τα σχετικά στοιχεία που υπάρχουν στην παρτίδα, αλλά αυτά
// μηδενίζονται κατά την επαναδιανομή και έτσι δεν μπορούμε να δούμε
// την τελευταία μπάζα της τελευταίας διανομής μετά την επαναδιανομή.

Tsoxa.azabPios = [];
Tsoxa.azabFila = [];

Tsoxa.azabRefreshDOM = function() {
	var trapezi = Tsoxa.trapezi, pios, fila, torini, i, iseht;

	// Στο σημείο αυτό ελέγχουμε αν υπάρχουν στοιχεία τελευταίας
	// μπάζας στην παρτίδα. Αν δεν υπάρχουν σημαίνει ότι δεν
	// εμφανίσαμε καμία μπάζα γι' αυτή την παρτίδα, οπότε θα
	// πρέπει να καταφύγουμε σε τυχόν κρατημένη τελευταία μπάζα
	// της τσόχας μας.

	pios = trapezi.azabPios;
	if (pios.length) {
		fila = trapezi.azabFila;
		Tsoxa.azabPios = [];
		Tsoxa.azabFila = [];
		torini = true;
	}
	else {
		pios = Tsoxa.azabPios;
		fila = Tsoxa.azabFila;
		torini = false;
	}

	Tsoxa.azabDOM.empty().
	css('display', Tsoxa.flags.azab ? 'block' : 'none');
	for (i = 0; i < pios.length; i++) {
		if (torini) {
			Tsoxa.azabPios.push(pios[i]);
			Tsoxa.azabFila.push(fila[i]);
		}

		iseht = Kafenio.egoThesiMap(pios[i]);
		Tsoxa.azabDOM.
		append($('<img>').addClass('tsoxa_azabFilo').attr({
			id: 'tsoxa_azabFilo' + iseht,
			src: '../ikona/trapoula/' + fila[i].filoXromaGet() + fila[i].filoAxiaGet() + '.png',
		}));
	}

	return Tsoxa;
};

Tsoxa.claimRefreshDOM = function() {
	var trapezi = Tsoxa.trapezi, filaDom;

	$('#tsoxa_claimXartosia').remove();
	if (!trapezi) return Tsoxa;

	switch (trapezi.partidaFasiGet()) {
	case 'CLAIM':
		break;
	default:
		return Tsoxa;
	}

	filaDom = trapezi.claimFila.xartosiaDOM(1);
	Tsoxa.trapeziDOM.append($('<div>').attr('id', 'tsoxa_claimXartosia').
	append($('<div>').attr('id', 'tsoxa_claimMinima').text('Δεν δίνω άλλη μπάζα!')).
	append(filaDom));
	return Tsoxa;
};

// Η function "peristrofiDOM" καλείται κατά τη χειραφεσία της τσόχας, όπου
// η τσόχα ανεξαρτοποιείται και μπορεί να μετακινηθεί σε οποιοδήποτε μέρος
// της σελίδας. Σκοπός της function είνα, ακριβώς, να κάνει σαφές αυτό το
// γεγονός περιστεφοντας λίγες φορές την τσοχα δεξιά-αριστερά.

Tsoxa.peristrofiDOM = function(rotationCount) {
	var rotation;

	if (rotationCount === undefined) rotationCount = 1;

	if (rotationCount > 4) {
		Client.fyi.kato('Τώρα μπορείτε να σύρετε την τσόχα σε βολικότερο μέρος&hellip;');
		Tsoxa.trapeziDOM.css({
			'transform': '',
			'-ms-transform': '',
			'-webkit-transform': '',
		});
		Tsoxa.enimerosi
		return Tsoxa;
	}

	rotation = (rotationCount % 2 ? '2deg' : '-2deg');
	Tsoxa.trapeziDOM.css({
		'transform': 'rotate(' + rotation + ')',
		'-ms-transform': 'rotate(' + rotation + ')',
		'-webkit-transform': 'rotate(' + rotation + ')',
	});
	setTimeout(function() {
		Tsoxa.peristrofiDOM(rotationCount + 1);
	}, 60);

	return Tsoxa;
};

Tsoxa.sizitisiRefreshDOM = function() {
	Tsoxa.sizitisiClearDOM(Tsoxa.trapezi);
	Tsoxa.trapezi.trapeziSizitisiWalk(function() {
		this.sizitisiCreateDOM(Tsoxa);
	}, 1);
	if (!Tsoxa.sizitisiDOM.data('pagomeno')) {
		Tsoxa.sizitisiDOM.scrollKato(1, function() {
			Tsoxa.sizitisiDOM.css('visibility', 'visible');
			Tsoxa.sizitisiDOM.scrollKato();
		});
	}

	return Tsoxa;
};

Tsoxa.sizitisiClearDOM = function() {
	Tsoxa.sizitisiDOM.empty().
	append(Tsoxa.sizitisiProepiskopisiDOM = $('<div>').addClass('sizitisiProepiskopisi'));
	return Tsoxa;
};

Tsoxa.kinisiFilo = function(pektis, filo, callback, delay) {
	var css = {width: '80px'}, tsoxaPos, filoPos, olif;

	switch (Kafenio.egoThesiMap(pektis)) {
	case 3:
		css.top = 190;
		css.left = 200;
		break;
	case 2:
		css.top = 170;
		css.left = 260;
		break;
	default:
		css.top = 210;
		css.left = 230;
		break;
	}

	tsoxaPos = Tsoxa.trapeziDOM.offset();
	filoPos = filo.offset();

	olif = filo.clone().appendTo(Tsoxa.trapeziDOM).css({
		position: 'absolute',
		top: (filoPos.top - tsoxaPos.top - 3) + 'px',
		left: (filoPos.left - tsoxaPos.left - 3) + 'px',
		marginLeft: 0,
	});

	css.top = css.top + 'px';
	css.left = css.left + 'px';
	
	filo.css('visibility', 'hidden');
	if (delay === undefined) delay = 350;
	olif.removeClass('tsoxa_xartosiaFiloOmioxromo').animate(css, delay, callback);
	return Tsoxa;
};

Tsoxa.kinisiBaza = function() {
	var trapezi, pios, css = {width: 0};

	trapezi = Tsoxa.trapezi;
	if (!trapezi) return;
	if (!trapezi.bazaFila) return;
	if (trapezi.bazaFila.length) return;

	pios = trapezi.partidaBazaPios(true);
	switch (Kafenio.egoThesiMap(pios)) {
	case 3:
		css.left = '100px';
		css.top = '140px';
		break;
	case 2:
		css.left = '400px';
		css.top = '140px';
		break;
	default:
		css.left = '160px';
		css.top = '350px';
		break;
	}

	Tsoxa.
	bazaRefreshDOM(true).
	azabRefreshDOM();
	Kafenio.tsoxa.$('.tsoxa_velosFilo').delay(400).fadeOut();
	Kafenio.tsoxa.$('.tsoxa_bazaFilo').delay(600).animate(css);
	return Tsoxa;
};

Tsoxa.isTrapezi = function(trapezi) {
	if (!Tsoxa.trapezi) return false;
	return Tsoxa.trapezi.trapeziIsTrapezi(trapezi);
};

Tsoxa.oxiTrapezi = function(trapezi) {
	if (!Tsoxa.trapezi) return true;
	return Tsoxa.trapezi.trapeziOxiTrapezi(trapezi);
};

Tsoxa.tabKafenio = function() {
	return Client.tab($('<a>').attr({href: '#'}).on('click', function(e) {
		e.stopPropagation();
		e.preventDefault();
		window.open('', 'kafenio').focus();
		Kafenio.inputRefocus();
		return false;
	}).append(Client.sinefo('Καφενείο')), $('#toolbarLeft'));

};

Tsoxa.thesiWalk = function(callback) {
	var thesi;

	for (thesi = 1; thesi <= Prefadoros.thesiMax; thesi++) {
		callback(thesi);
	}

	return Tsoxa;
};

// TODO
// ΜΑΛΛΟΝ ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ Η ΕΠΟΜΕΝΗ ΜΕΘΟΔΟΣ!!!

Tsoxa.energiaCount = function() {
	var trapezi, dianomi, energia;

	trapezi = Tsoxa.trapezi;
	if (!trapezi) return 0;

	dianomi = Tsoxa.trapezi.trapeziTelefteaDianomi();
	if (!dianomi) return 0;

	energia = dianomi.energiaArray;
	if (!energia) return 0;

	return energia.length;
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Tsoxa.ofelimoSetup = function() {
	Tsoxa.ofelimoDOM = $('#ofelimo').
	append(Tsoxa.theatesDOM = $('<div>').attr({
		id: 'theates',
		title: 'Θεατές τραπεζιού',
	}).addClass('stili')).
	append(Tsoxa.kpanelDOM = $('<div>').addClass('stili panel')).
	append(Tsoxa.tsoxaDOM = $('<div>').attr('id', 'tsoxa').addClass('stili')).
	append(Tsoxa.cpanelDOM = $('<div>').addClass('stili panel')).
	append(Tsoxa.pssDOM = $('<div>').attr('id', 'pss').addClass('stili')).
	append(Tsoxa.epanelDOM = $('<div>').attr('id', 'epanel').addClass('stili panel'));
	Tsoxa.pss.setup();
	Tsoxa.mainDOM = Tsoxa.tsoxaDOM;

	Tsoxa.tsoxaDOM.append(Tsoxa.trapeziDOM = $('<div>').addClass('tsoxa_trapezi'));
	Tsoxa.sizitisiDOM.empty().append(Tsoxa.sizitisiProepiskopisiDOM = $('<div>').addClass('sizitisiProepiskopisi'));

	return this;
};

Tsoxa.panelRefresh = function() {
	Tsoxa.kpanel.refresh();
	Tsoxa.cpanel.refresh();
	return Tsoxa;
};

Tsoxa.akirosiKiniseon = function() {
	var trapezi = Tsoxa.trapezi;
	if (!trapezi) return false;
	return trapezi.trapeziAkirosiGet();
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Tsoxa.ofelimoStretch = function() {
	var diastasi, pssW, sizitisiH;

	Tsoxa.ofelimoVerticalStretch();
	if (!Tsoxa.ofelimoHorizontalStretch()) return;
	if (!Tsoxa.sizitisiDOM.data('pagomeno')) Tsoxa.sizitisiDOM.scrollKato();

	// Έχει γίνει διαμόρφωση των περιοχών και εφόσον δεν υπάρχει
	// κρατημένη διάσταση στο session cookie, την κρατάμε τώρα και
	// δεν κάνουμε καμία περαιτέρω ενέργεια.

	if (!Client.session.hasOwnProperty('tsoxaDiastasi')) {
		Tsoxa.pss.inputWidthFix();
		Tsoxa.diastasiSave();
		return;
	}

	// Υπήρχε κρατημένη διάσταση στο session cookie και θα επιχειρήσουμε
	// να την εφαρμόσουμε στις διάφορες περιοχές, εφόσον μας παίρνει.
	// Παράλληλα διαγράφουμε την κρατημένη διάσταση ώστε να κρατηθεί
	// εκ νέου σε επόμενη αλλαγή.

	diastasi = Client.session.tsoxaDiastasi.split(':');
	delete Client.session.tsoxaDiastasi;

	// Επιχειρούμε αρχικά την κατά πλάτος διαμόρφωση με βάση την κρατημένη
	// διάσταση. Αν το πλάτος δεν επαρκεί, αφήνουμε τις περιοχές αναλλοίωτες.

	pssW = Tsoxa.ofelimoW;
	pssW -= Tsoxa.kpanelDOM.outerWidth(true);
	pssW -= Tsoxa.cpanelDOM.outerWidth(true);
	if (Tsoxa.flags.emoticon) pssW -= Tsoxa.epanelDOM.outerWidth(true);
	pssW -= diastasi[2];
	pssW -= diastasi[3];
	if (pssW >= 0) {
		Tsoxa.theatesDOM.css('width', diastasi[2] + 'px');
		Tsoxa.tsoxaDOM.css('width', diastasi[3] + 'px');
		Tsoxa.pssDOM.css('width', pssW + 'px');
		Tsoxa.pss.inputWidthFix();
	}

	// Τώρα επιχειρούμε την καθ' ύψος επαναφορά των περιοχών pss, ήτοι της
	// περιοχής των προσκλήσεων, της περιοχής αναζήτησης και της περιοχής
	// της συζήτησης του καφενείου.

	sizitisiH = Tsoxa.ofelimoH;
	sizitisiH -= Tsoxa.stitlosDOM.outerHeight();
	sizitisiH -= Tsoxa.sizitisiDOM.outerHeight() - Tsoxa.sizitisiDOM.innerHeight();
	Tsoxa.sizitisiDOM.css('height', sizitisiH + 'px');
};

Tsoxa.ofelimoVerticalStretch = function() {
	var oh;

	oh = Tsoxa.ofelimoDOM.height();
	if (Tsoxa.ofelimoH == oh) return;

	Tsoxa.ofelimoDOM.children('div').css('height', oh + 'px');
	Tsoxa.pss.enotitaStretch(oh);
	Tsoxa.ofelimoH = oh;
};

Tsoxa.ofelimoHorizontalStretch = function() {
	var ow, w, tsoxaW = 566, pssW = 400;

	// Εκκινούμε τη διαδικασία οριζόντιας επαναδιάταξης με ένα συνολικό πλάτος
	// που εκετείνεται σε όλη τη διάσταση του ωφέλιμου χώρου.

	ow = Tsoxa.ofelimoDOM.width();
	if (ow < 1) return false;

	// Αν η επαναδιάταξη έχει ξαναγίνει τουλάχιστον μια φορά, θα επιχειρήσουμε
	// απλώς να αυξομειώσουμε το χώρο του pss.

	if (Tsoxa.hasOwnProperty('ofelimoW')) {
		if (Tsoxa.ofelimoW == ow) return;
		Tsoxa.ofelimoW = ow;
		ow -= Tsoxa.kpanelDOM.outerWidth(true);
		ow -= Tsoxa.cpanelDOM.outerWidth(true);
		if (Tsoxa.flags.emoticon) ow -= Tsoxa.epanelDOM.outerWidth(true);
		ow -= Tsoxa.theatesDOM.outerWidth(true);
		ow -= Tsoxa.tsoxaDOM.outerWidth(true);
		if (ow > 10) return Tsoxa.pssDOM.css('width', ow + 'px');

		// Ο χώρος που απέμεινε για το pss ήταν ανεπαρκής, επομένως εκκινούμε
		// εκ νέου με το συνολικό πλάτος και επιχειρούμε καθολική οριζόντια
		// επαναδιάταξη.

		ow = Tsoxa.ofelimoDOM.width();
	}

	Tsoxa.ofelimoW = ow;

	ow -= Tsoxa.kpanelDOM.outerWidth(true);
	ow -= Tsoxa.cpanelDOM.outerWidth(true);
	if (Tsoxa.flags.emoticon) ow -= Tsoxa.epanelDOM.outerWidth(true);

	if (ow >= tsoxaW) {
		Tsoxa.tsoxaDOM.css('width', tsoxaW + 'px');
		ow -= tsoxaW;
		if (ow < pssW) pssW = ow;
		Tsoxa.pssDOM.css('width', pssW + 'px');
		ow -= pssW;
		Tsoxa.theatesDOM.css('width', ow + 'px');
	}
	else {
		w = parseInt(ow * 0.2);
		Tsoxa.theatesDOM.css('width', w + 'px');
		w = parseInt(ow * 0.3);
		Tsoxa.pssDOM.css('width', w + 'px');

		ow -= Tsoxa.theatesDOM.outerWidth(true);
		ow -= Tsoxa.pssDOM.outerWidth(true);
		if (ow < 0) ow = 0;
		Tsoxa.tsoxaDOM.css('width', ow + 'px');
	}

	Tsoxa.pss.inputWidthFix();
	return true;
};

// Η function "diastasiSave" κρατάει τις αναλογίες των περιοχών στο session cookie
// με σκοπό τη διατήρηση της εικόνας σε περίπτωση επαναφόρτωσης της σελίδας.
// Αν περάσουμε string διαστάσεων, τότε χρησιμοποιούμε τις διστάσεις αυτές.

Tsoxa.diastasiSave = function(diastasi) {
	var whtl;

	if (diastasi) whtl = diastasi;
	else {
		whtl = $(window).width() + ':';
		whtl += $(window).height() + ':';
		whtl += Tsoxa.theatesDOM.innerWidth() + ':';
		whtl += Tsoxa.tsoxaDOM.innerWidth() + ':';

		if (window.screenY !== undefined) whtl += window.screenY;
		else if (window.screenTop !== undefined) whtl += window.screenTop;
		else whtl += '80';
		whtl += ':';

		if (window.screenX !== undefined) whtl += window.screenX;
		else if (window.screenLeft !== undefined) whtl += window.screenLeft;
		else whtl += '80';
	}

	if (whtl === Client.session.tsoxaDiastasi) return;

	Client.session.tsoxaDiastasi = whtl;
	Tsoxa.opener.Client.session.tsoxaDiastasi = whtl;
	if (diastasi) {
		delete Tsoxa.ofelimoH;
		delete Tsoxa.ofelimoW;
		$(window).trigger('resize');
	}

	$.ajax('diastasiSave.php', {
		data: {
			diastasi: whtl,
		},
	}).
	done(function(rsp) {
		if (rsp) Client.fyi.epano(rsp);
	}).
	fail(function() {
		Client.fyi.epano('Απέτυχε η καταχώρηση των ρυθμίσεων');
	});
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Tsoxa.epanel = {
	adamo: 1,	// τρέχουσα ομάδα εργαλείων
	omadaMax: 7,	// τελευταία ομάδα
	direction: 1,	// φορά αλλαγής εργαλείων
};

Tsoxa.epanel.setup = function() {
	Kafenio.epanel.setup(Tsoxa);
};

Tsoxa.epanel.refresh = function(adamo) {
	if (adamo !== undefined) Tsoxa.epanel.adamo = adamo;
	Tsoxa.panel.refresh(Tsoxa.epanel, Tsoxa.opener);
}

Tsoxa.epanel.iconDOM = function(omada, img) {
	return Kafenio.epanel.iconDOM(omada, img, Tsoxa);
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Tsoxa.isDealer = function(thesi) {
	var trapezi, dianomi;

	trapezi = Tsoxa.trapezi;
	if (!trapezi) return false;

	return(trapezi.partidaDealerGet() === thesi);
};

Tsoxa.isProtos = function(thesi) {
	var trapezi, dianomi;

	trapezi = Tsoxa.trapezi;
	if (!trapezi) return false;

	return(trapezi.partidaProtosGet() === thesi);
};

Tsoxa.isEpomenos = function(thesi) {
	var trapezi;

	trapezi = Tsoxa.trapezi;
	if (!trapezi) return false;

	return(trapezi.partidaEpomenosGet() === thesi);
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

Tsoxa.xipnitiriStadioList = [
	{ t: 10000, s: 'kanarini.ogg' },
	{ t: 10000, s: 'clocktickslow.ogg' },
	{ t: 10000, s: 'treno.ogg' },
	{ t: 10000, s: 'kabanaki.ogg' },
	{ t: 10000, s: 'sfirixtra.ogg' },
	{ t: 10000, s: 'korna.ogg' },
	{ t: 10000, s: 'dalika.ogg' },
];

delete Tsoxa.xipnitiriTimer;

Tsoxa.xipnitiriOplismos = function() {
	if (Debug.flagGet('xipnitiriOff')) return Tsoxa;

	Tsoxa.
	xipnitiriAfoplismos().
	xipnitiriTimerSet(0);
};

Tsoxa.xipnitiriTimerSet = function(stadio) {
	if (stadio >= Tsoxa.xipnitiriStadioList.length) {
		delete Tsoxa.xipnitiriTimer;
		return Tsoxa;
	}

	Tsoxa.xipnitiriTimer = setTimeout(function() {
		Client.sound.play(Tsoxa.xipnitiriStadioList[stadio].s);
		Tsoxa.xipnitiriTimerSet(stadio + 1);
	}, Tsoxa.xipnitiriStadioList[stadio].t);
	return Tsoxa;
};

Tsoxa.xipnitiriAfoplismos = function() {
	if (!Tsoxa.xipnitiriTimer) return Tsoxa;

	clearTimeout(Tsoxa.xipnitiriTimer);
	delete Tsoxa.xipnitiriTimer;
	return Tsoxa;
};
